<?php

namespace App\Http\Controllers\Home;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Payment\Client\Charge;
use Payment\Config;
use Illuminate\Support\Facades\Validator;

date_default_timezone_set('Asia/Shanghai');

class AlipayPaymentController extends Controller
{
	/**
	 * @desc 网站PC支付宝支付
	 * @param $amount 支付金额，单位： 元
	 * @param $pid 产品ID ,如果是充值，实例 ： pid=5,必填
	 * @param $type: cz—虚拟类商品,必填
	 */
	public function alipayweb(Request $request)
    {
    	$product_id = $request->get('pid');
    	$type = $request->get('type');
    	
    	$validator = Validator::make($request->all(), [
    		    'pid' => 'required',
    			'type' => ['required']
    	]);
    	
    	if ($validator->fails()) {
    		return response()->json($validator->messages(), 200);
    	}
    	
    	if($type == 'cz')
    	{
    		//充值,得去查找对应的模板,再找到对应的套餐金额，$amount 套餐金额
    		$amount = 0.01;
    		$body = '商品描述';//商品描述
    		$subject= '商品名称';//商品名称
    	}
    	
//     	$body = $request->get('body','');//商品描述
//     	$subject= $request->get('subject','');//商品名称
    	
    	// 订单信息
    	$orderNo = time() . rand(1000, 9999);
    	$pay_data= [
    			'body'    => $body,
    			'subject'    => $subject,
    			'order_no'    => '2' . $orderNo,//订单开头第一位为2，表示支付宝web 的订单
    			'timeout_express' => time() + 600,// 表示必须 600s(10分钟) 内付款
    			'amount'    => $amount,// 单位为元 ,最小为0.01
    			'return_param' => '',
    			// 'client_ip' => isset($_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_ADDR'] : '127.0.0.1',// 客户地址
    			'goods_type' => '0',// 0—虚拟类商品，1—实物类商品
    			'store_id' => '',
    			
    			// 说明地址：https://doc.open.alipay.com/doc2/detail.htm?treeId=270&articleId=105901&docType=1
    			// 建议什么也不填
    			'qr_mod' => '',
    	];
    	
    	$aliConfig = $this->aliconfig();
    	try {
    		$url = Charge::run(Config::ALI_CHANNEL_WEB, $aliConfig, $pay_data);
    	} catch (PayException $e) {
    		echo $e->errorMessage();
    		exit;
    	}
    	
    	header('Location:' . $url);
    }
    
    /**
     * @desc 支付宝支付配置
     * @return boolean[]|string[]|array[]
     */
    public function aliconfig()
    {
    	return [
		    	'use_sandbox'               => true,// 是否使用沙盒模式
		    	
		    	'app_id'                    => '2016091200493586',
		    	'sign_type'                 => 'RSA2',// RSA  RSA2
		    	
		    	// 可以填写文件路径，或者密钥字符串  当前字符串是 rsa2 的支付宝公钥(开放平台获取)
		    	'ali_public_key'            => 'MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAphgjw6WIcN5kLDPWP+soRORg8ftq+bpd76HzfpAqUDYHhldKBW0mIGlEDDVQCDNulxj2TroL7S/2CSrhxG1gJvy5Gy8jdNcpC5ymvkrTkyqC/NWBDnBro5zzF6IS/4xhEy2hiSLPgbLCbs8NsFrHP7brC/u5ohd9n+j1g+mp/1/VDx4vHS0ZSnw9C+WjNXEQ/r+3TmeMpUnoZ3K8PDnMvT1Nku0jiclkwtcJ/DIJvmzBfaz1f5AFEL4kitB0iO3q/RE2B4YBJq1kLJ/Td0Fm8Apz9I6vw3tDHrKzrcLkEMeXW3kkEs8DNtPoSe4gmVc65t+VxgDiNdrJxzZJme2PQwIDAQAB',
		    	
		    	// 可以填写文件路径，或者密钥字符串  我的沙箱模式，rsa与rsa2的私钥相同，为了方便测试
		    	'rsa_private_key'           => 'MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQCmGCPDpYhw3mQsM9Y/6yhE5GDx+2r5ul3vofN+kCpQNgeGV0oFbSYgaUQMNVAIM26XGPZOugvtL/YJKuHEbWAm/LkbLyN01ykLnKa+StOTKoL81YEOcGujnPMXohL/jGETLaGJIs+BssJuzw2wWsc/tusL+7miF32f6PWD6an/X9UPHi8dLRlKfD0L5aM1cRD+v7dOZ4ylSehncrw8Ocy9PU2S7SOJyWTC1wn8Mgm+bMF9rPV/kAUQviSK0HSI7er9ETYHhgEmrWQsn9N3QWbwCnP0jq/De0MesrOtwuQQx5dbeSQSzwM20+hJ7iCZVzrm35XGAOI12snHNkmZ7Y9DAgMBAAECggEAaIg8yf8+NbrhVKhzKNs5BtKs6N6Q3waZ5B0LABZ/auf2KGh7X5roKfHWL9DFw8OK0HGXYsjYhLhwoiho2pTztNXNMfyi1gAsBvDaSF0Td0WEFtfQV2QNenVm0PLh/g89cTKAvaw46Km2kMKjHOClEcZve6U7mXYrTB7zlcfTg7KmCTNauYzz0p7oM4rIPl7ybXa90RtjPI62xtVBu4i3JjHTXIDdGpsCChKtqJuwX5KGWBP+RWuzRlbF6sTaIeBSznnMXpAIobOeXV73g+TTg10YrNcS6jFCDhGexdytIBNvkmZT4oOAcwaNcSHZYleBWOutDXiQeiSIajG7VizKcQKBgQD6h7drGDpsTdCLXW17NDaRib7pQOTU1Ely3jvVL9Eg3prNo7piqL6OTX5WQRPFqEg6GlQVJgddAZeyYeJGAjJl1ToZOHdkr1JHpfFmYLe8TICd7zkWoxjhpCUNOjtaXc7wFViEb7jFqXGUJIpbXZHyS34IUG41kkuxlaQ7nxJDnQKBgQCpuHzMwLBnphh6tmhkhmdXnsEaqzO3riIQ7cZMOX3FECU9WOV1RdZ8mqG03W7Fz3F3mDajZDv5nU6p3H8tG04EmShjxgeztKORTfTkHTOb0O4ffuZNQsSko5TVEQh7O6BI/umuMVKTXMFAIBTLLaOFdFW13rQqdLrJNACsM2LYXwKBgQCIAUlnkD2XMh82qT+YFN5S4A6OHjab+6rr+w1MTKshRvePD4VNrgHUyuj89lM/iH29XTGsUXrJ2OV7Z3wpOWQWuEzUCD14oVzvnHyScYsNZBKmqom5ak1FoZCjv6sdAbQnzc7CBsyuMbCBFd0ugHuMp8MBzHgoCQWioHQKEe8eWQKBgQCKHl9B6hYlY6BMTSHLnS2Auut/no/qDUYf7MERyz+1HZyQvkWOGJWitdyfagz54gX/Q9pDQhEk5IXd6ll9BdmKGHIsMD6YWos6duyyr6kORwtiik011v5c1dsLQl9amn2oqfrWDcGbt0J1wyXo621F8BTIe0K3wmM31qAtg2wPlQKBgQDdOJSEbhXYafWoOi94UG+jhCq6HZuBdNhYbNTxniUBX5M5fjsJbdm1rjgfMHgkzCLXUWeRwzRahoEFVNgAzMMX8hYVabG8/im9pxjEtM/ikxJRGZ3J/ihgywJcDjAYDX0T3CA8YI3rQQ89OJaT++G07ZdnNH+yZLeCnJ2jPoGVpw==',
		
				'limit_pay'                 => [
						//'balance',// 余额
						//'moneyFund',// 余额宝
						//'debitCardExpress',// 	借记卡快捷
						//'creditCard',//信用卡
						//'creditCardExpress',// 信用卡快捷
						//'creditCardCartoon',//信用卡卡通
						//'credit_group',// 信用支付类型（包含信用卡卡通、信用卡快捷、花呗、花呗分期）
				],// 用户不可用指定渠道支付当有多个渠道时用“,”分隔
				
				// 与业务相关参数
				'notify_url'                => route('alipaynotify'),//异步通知
				'return_url'                => route('alipaysuccess'),//成功后返回的页面
				
				'return_raw'                => false,// 在处理回调时，是否直接返回原始数据，默认为 true
		];
    }
    
    /**
     * @desc 用户管理中心的支列表
     * @return \Illuminate\View\View|\Illuminate\Contracts\View\Factory
     */
    public function index()
    {
    	return view('home/recharge');
    }
    
    
    /**
     * @desc 支付宝付款页面
     * @return \Illuminate\View\View|\Illuminate\Contracts\View\Factory
     */
    public function payment()
    {
    	return view('home/payment');
    }
    
    
    /**
     * @desc 付款成功页面
     * @return \Illuminate\View\View|\Illuminate\Contracts\View\Factory
     */
    public function paymentSuccess()
    {
    	return view('home/payment_success');
    }
    
    /**
     * @desc 手机网站支付结果异步通知。对于手机网站支付产生的交易，支付宝会根据原始支付API中传入的异步通知地址notify_url，通过POST请求的形式将支付结果作为参数通知到商户系统。
     */
    public function notify(Request $request)
    {
    	$data = $request->all();
    	
    }
    
    /**
	 * 验签方法
	 * @param $arr 验签支付宝返回的信息，使用支付宝公钥。
	 * @return boolean
	 */
	function check($arr)
	{
		$aop = new AopClient();
		$aop->alipayrsaPublicKey = $this->alipay_public_key;
		$result = $aop->rsaCheckV1($arr, $this->alipay_public_key, $this->signtype);
		return $result;
	}
}
